actor MetoolClass : SemiHighArmorClass
{
	Player.ScoreIcon "METOMUGS"
	player.startitem "BaseFlagPack", 1
	player.startitem "SemiHighArmor"
	player.soundclass "metoolc"
	Player.ViewHeight 65
	player.displayname "Metool"
	player.startitem "MetSuitChaser"
	player.startitem "MetSuitSpinning"
	player.startitem "MetSuitMommy"
	player.startitem "MetSuitSpace"
	player.startitem "Base28Ammo", 28
	player.startitem "BaseAltfireAmmo", 112
	player.startitem "CanThirdFire"
	player.startitem "MetSuitFakeInvul"
	player.startitem "UltimateAttackItem4", 1
	player.startitem "UltSoundWatcherSpawn4"
	player.startitem "IsLarge"
	States
	{
		Animation1:
		Spawn:
		MTGZ A 0
		MTGZ B 1 A_JumpIf(z-floorz>0,"Jumping")
		MTGZ A 1 A_JumpIf(z-floorz>0,"Jumping")
		Goto Spawn+2
		
		See:
		//MTGZ B 0 A_PlaySoundEx("weapon/mettank","Body")
		MTGZ B 0 A_JumpIfInventory("BaseCustomFlag1",1,"See2")
		MTGZ BBBCCCDDDEEE 1 A_JumpIf(z-floorz>0,"Jumping")
		Goto Spawn+1
		
		Jumping:
		MTGZ I 0 A_JumpIf(momz<1,"Falling")
		MTGZ I 1 A_JumpIf(z-floorz<=0, "Spawn")
		loop
		
		Falling:
		MTGZ J 1 A_JumpIf(z-floorz<=0, "Spawn")
		wait
	
		Missile:
		MTGZ B 0 A_JumpIfInventory("MetHideAnim",1,"A4Loop")
		MTGZ B 0 A_JumpIfInventory("BaseCustomFlag1",1,"Missile2")
		MTGZ FFFGGG 1 A_JumpIf(z-floorz>0,"JumpingMissile")
		goto Spawn+1
	
		JumpingMissile:
		MTGZ N 0 A_JumpIf(momz<1,"FallingMissile")
		MTGZ M 1 A_JumpIf(z-floorz<=0, "Missile")
		MTGZ N 0 A_JumpIf(momz<1,"FallingMissile")
		MTGZ M 1 A_JumpIf(z-floorz<=0, "Missile")
		MTGZ N 0 A_JumpIf(momz<1,"FallingMissile")
		MTGZ M 1 A_JumpIf(z-floorz<=0, "Missile")
		MTGZ N 0 A_JumpIf(momz<1,"FallingMissile")
		MTGZ M 1 A_JumpIf(z-floorz<=0, "Missile")
		MTGZ N 0 A_JumpIf(momz<1,"FallingMissile")
		MTGZ M 1 A_JumpIf(z-floorz<=0, "Missile")
		MTGZ N 0 A_JumpIf(momz<1,"FallingMissile")
		MTGZ M 1 A_JumpIf(z-floorz<=0, "Missile")
		goto Jumping
		
		FallingMissile:
		MTGZ NNNNNN 1 A_JumpIf(z-floorz<=0, "Missile")
		Goto Jumping
		
		Animation2:
		MTGZ LLLLLLLLLLLL 1 A_JumpIf(z-floorz>0,"JumpingA2")
		goto Spawn+2
		
		JumpingA2:
		MTGZ P 0 A_JumpIf(momz<1,"FallingA2")
		MTGZ O 1 A_JumpIf(z-floorz<=0, "Animation2")
		MTGZ P 0 A_JumpIf(momz<1,"FallingA2")
		MTGZ O 1 A_JumpIf(z-floorz<=0, "Animation2")
		MTGZ P 0 A_JumpIf(momz<1,"FallingA2")
		MTGZ O 1 A_JumpIf(z-floorz<=0, "Animation2")
		MTGZ P 0 A_JumpIf(momz<1,"FallingA2")
		MTGZ O 1 A_JumpIf(z-floorz<=0, "Animation2")
		MTGZ P 0 A_JumpIf(momz<1,"FallingA2")
		MTGZ O 1 A_JumpIf(z-floorz<=0, "Animation2")
		MTGZ P 0 A_JumpIf(momz<1,"FallingA2")
		MTGZ O 1 A_JumpIf(z-floorz<=0, "Animation2")
		MTGZ P 0 A_JumpIf(momz<1,"FallingA2")
		MTGZ O 1 A_JumpIf(z-floorz<=0, "Animation2")
		MTGZ P 0 A_JumpIf(momz<1,"FallingA2")
		MTGZ O 1 A_JumpIf(z-floorz<=0, "Animation2")
		MTGZ P 0 A_JumpIf(momz<1,"FallingA2")
		MTGZ O 1 A_JumpIf(z-floorz<=0, "Animation2")
		MTGZ P 0 A_JumpIf(momz<1,"FallingA2")
		MTGZ O 1 A_JumpIf(z-floorz<=0, "Animation2")
		MTGZ P 0 A_JumpIf(momz<1,"FallingA2")
		MTGZ O 1 A_JumpIf(z-floorz<=0, "Animation2")
		MTGZ P 0 A_JumpIf(momz<1,"FallingA2")
		MTGZ O 1 A_JumpIf(z-floorz<=0, "Animation2")
		goto Jumping
		
		FallingA2:
		MTGZ PPPPPPPPPPPP 1 A_JumpIf(z-floorz<=0, "Animation2")
		Goto Jumping
		
		Animation3:
		M3T0 A 0
		M3T0 D 0 A_JumpIf(momx>0.1||momy>0.1||momx<-0.1||momy<-0.1,"See2")
		M3T0 D 1 A_JumpIf(z-floorz>0,"Jumping2")
		M3T0 A 0 A_JumpIf(momx>0.1||momy>0.1||momx<-0.1||momy<-0.1,"See2")
		M3T0 A 1 A_JumpIf(z-floorz>0,"Jumping2")
		goto Animation3+3
		
		See2:
		M3T0 DDDEEEFFFGGG 1 A_JumpIf(z-floorz>0,"Jumping2")
		goto Animation3
		
		Jumping2:
		M3T0 J 1 A_JumpIf(z-floorz<=0, "Animation3")
		wait
		
		Missile2:
		M3T0 BBB 1 A_JumpIf(z-floorz>0,"JumpingMissile2")
		
		Missile3:
		M3T0 CCC 1 A_JumpIf(z-floorz>0,"JumpingMissile3")
		goto Animation3
		
		JumpingMissile2:
		M3T0 RRR 1 A_JumpIf(z-floorz<=0,"Missile2")
		
		JumpingMissile3:
		M3T0 SSS 1 A_JumpIf(z-floorz<=0,"Missile3")
		goto Jumping2
		
		Animation4:
		M3T0 KI 1
		
		A4Loop:
		M3T0 I 1
		loop
		
		Animation5:
		M3T0 KCA 1
		goto Animation3
		
		ClassTimeStop:
		PLAY A 0 SetPlayerProperty(0,1,4)
		PLAY A 0 ACS_Execute(528,0)
		MTGZ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_Stop
		PLAY A 0 SetPlayerProperty(0,0,4)
		Goto pain+1
		ClassPain:
		MTGZ H 0 A_JumpIfInventory("BaseCustomFlag1",1,"ClassPain2")
		MTGZ HHHHHHHHHH 2 A_SpawnItem("PainFX",0,3)
		Goto Spawn+1
		ClassPain2:
		M3T0 HHHHHHHHHH 2 A_SpawnItem("PainFX",0,3)
		Goto Animation3
		ClassDeath:
		M3T0 H 0 ACS_ExecuteAlways(991,0,667)
		M3T0 H 10 ACS_ExecuteAlways(999,0,0)
		M3T0 H 0 A_PlaySoundEx("weapon/mm4pain","Body")
		NOFX A 0 A_SpawnItemEx("MMFXDeath",0,0,32)
		NOFX A 1 A_CheckPlayerDone
		wait
		WeaponGetM:
		M3T0 H 0 A_JumpIfInTargetInventory("MagnetBeamWepM",1,2)
		M3T0 H 0 A_GiveToTarget("WeaponGetter")
		M3T0 H 0 A_GiveToTarget("MagnetBeamWepM")
		goto ClassDeath
		
		
		ClassIceDeath:
		MTGZ A 35
		NOFX A 0 A_SpawnItemEx("FrozenDeathFX",0,0,16)
		NOFX A 1 A_CheckPlayerDone
		wait
	}
}

actor MetSuitHealthCheck : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIfHealthLower(2,"Eject")
stop
Eject:
TNT1 A 0 ThrustThingZ(0,20,0,0)
TNT1 A 0 A_Recoil(-25)
TNT1 A 0 A_GiveInventory("MetSuitEject",1)
stop
}
}

actor MetSuitEject : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_TakeInventory("MediumLongUltimateAmmo",999)
TNT1 A 0 A_TakeInventory("MediumShortUltimateAmmo",999)
TNT1 A 0 A_GiveInventory("MetSuitEnd")
TNT1 A 0 A_TakeInventory("UltimateAttackItem4",999)
TNT1 A 0 A_GiveInventory("UltimateAttackItem2",1)
TNT1 A 0 A_GiveInventory("UltSoundWatcherSpawn2",1)
TNT1 A 0 A_TakeInventory("UltAttackFlag",999)
TNT1 A 0 A_TakeInventory("MetZCharge",999)
TNT1 A 0 A_TakeInventory("WeaponCharge",999)
TNT1 A 0 A_GiveInventory("Base28Ammo",28)
TNT1 A 0 A_GiveInventory("BaseAltfireAmmo",112)
TNT1 A 0 A_GiveInventory("MetoolBusterBoss",1)
TNT1 A 0 A_GiveInventory("MetEjectInvuln",1)
TNT1 A 0 A_SpawnItemEx("MetBlinkWatcher1")
TNT1 A 0 ACS_ExecuteAlways(991,0,667)
TNT1 A 0 A_SpawnItemEx("DestroyedMetSuit",0,0,0,0,0,0,0,1)
TNT1 A 0 HealThing(65,65)
TNT1 A 0 ACS_NamedExecuteWithResult("VC_AdjustMaxHealth",65,0)
//TNT1 A 0 SetPlayerProperty(0,0,16)
TNT1 A 0 A_GiveInventory("InvProtection",1)
TNT1 A 0 A_ChangeFlag("INVULNERABLE",1)
TNT1 A 0 ACS_NamedExecute("VC_ViewHeight",0,20)
TNT1 A 0 ACS_Execute(191,0,APROP_JumpZ,12,1)
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",3)
TNT1 A 0 A_TakeInventory("MetSuitChaser",1)
TNT1 A 0 A_TakeInventory("MetSuitSpinning",1)
TNT1 A 0 A_TakeInventory("MetSuitMommy",1)
TNT1 A 0 A_TakeInventory("MetSuitSpace",1)
TNT1 A 0 A_GiveInventory("SuitlessMetSpeed",1)
TNT1 A 0 A_GiveInventory("BaseCustomFlag1",1)
TNT1 A 0 A_TakeInventory("BaseCustomFlag2",999)
TNT1 A 0 A_TakeInventory("IsLarge")
TNT1 A 0 A_TakeInventory("VCKillstreak",12)
stop
}
}

actor MetSuitReturn : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_TakeInventory("MediumLongUltimateAmmo",999)
TNT1 A 0 A_TakeInventory("MediumShortUltimateAmmo",999)
TNT1 A 0 A_GiveInventory("MetSuitStart")
TNT1 A 0 A_TakeInventory("UltimateAttackItem2",999)
TNT1 A 0 A_GiveInventory("UltimateAttackItem4",1)
TNT1 A 0 A_GiveInventory("UltSoundWatcherSpawn4",1)
TNT1 A 0 A_TakeInventory("UltAttackFlag",999)
TNT1 A 0 A_TakeInventory("MetZCharge",999)
TNT1 A 0 A_TakeInventory("WeaponCharge",999)
TNT1 A 0 A_GiveInventory("Base28Ammo",28)
TNT1 A 0 A_GiveInventory("BaseAltfireAmmo",112)
TNT1 A 0 A_GiveInventory("MetSuitChaser",1)
TNT1 A 0 A_GiveInventory("MetSuitSpinning",1)
TNT1 A 0 A_GiveInventory("MetSuitMommy",1)
TNT1 A 0 A_GiveInventory("MetSuitSpace",1)
TNT1 A 0 A_GiveInventory("MetRegainInvuln",1)
TNT1 A 0 A_SpawnItemEx("MetBlinkWatcher2")
TNT1 A 0 ACS_ExecuteAlways(991,0,666)
TNT1 AAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("MetTeleportFX",random(0,56),0,random(0,128),0,0,0,random(0,359))
TNT1 A 0 A_GiveInventory("MetHealthCheck",1)
//TNT1 A 0 SetPlayerProperty(0,1,16)
TNT1 A 0 A_GiveInventory("InvProtection",1)
TNT1 A 0 A_ChangeFlag("INVULNERABLE",1)
TNT1 A 0 ACS_NamedExecute("VC_ViewHeight",0,65)
TNT1 A 0 ACS_Execute(191,0,APROP_JumpZ,10,1)
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",1)
TNT1 A 0 A_TakeInventory("MetoolBusterBoss",1)
TNT1 A 0 A_TakeInventory("SuitlessMetSpeed",1)
TNT1 A 0 A_TakeInventory("BaseCustomFlag1",999)
TNT1 A 0 A_TakeInventory("BaseCustomFlag2",999)
TNT1 A 0 A_GiveInventory("IsLarge")
stop
}
}

actor MetSuitEnd : Powerup
{
Powerup.Duration 70
}

actor MetSuitStart : Powerup
{
Powerup.Duration 70
}

actor MetEjectInvuln : PowerInvulnerable
{
powerup.duration 17
}

actor MetRegainInvuln : PowerInvulnerable
{
powerup.duration 35
}

actor CamoAmmoCancel : Powerup
{
Powerup.Duration 10
}

actor CamoHealthCancel : Powerup
{
Powerup.Duration 16
}

actor MetSuitFakeInvul : CustomInventory
{
States
{
Pickup:
TNT1 A 0 SetPlayerProperty(0,1,16)
stop
}
}

actor SuitlessMetSpeed : PowerSpeed
{
	+POWERSPEED.NOTRAIL
	Powerup.Duration 0x7FFFFFFD
	Speed  1.0375
}

actor MetHideSpeed : PowerSpeed
{
	+POWERSPEED.NOTRAIL
	Powerup.Duration 0x7FFFFFFD
	Speed  0.2
}

actor MetCannonEndDelay : Powerup
{
Powerup.Duration 70
}

Actor DestroyedMetSuit
{
renderstyle translucent
alpha 0.75
PROJECTILE
+MISSILE
species "DeadBody"
+THRUSPECIES
+THRUACTORS
+NOGRAVITY
-NOEXPLODEFLOOR
+NOINTERACTION
reactiontime 3
scale 2.5
States
{
Spawn:
MTGZ R 0
MTGZ R 12 A_SpawnItemEx("MetExplodeFX",random(-50,50),random(-50,50),random(0,120))
MTGZ R 12 A_SpawnItemEx("MetExplodeFX",random(-50,50),random(-50,50),random(0,120))
MTGZ R 0 A_Countdown
MTGZ R 0 A_FadeOut(0.25)
loop
Death:
TNT1 A 0
stop
}
}

actor MetExplodeFX : BasicClientSide
{
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileFXCode")
NAPA E 0 A_PlaySoundEx("weapon/mm4explode", "Weapon")
NAPA EFGHIJKLMNOPQRS 1
stop
}
}

actor MetSuitChaser : VCBaseWeapon
{
	Weapon.SlotNumber 1
	Tag "Metonger Z - Chaser Metool"
	inventory.icon "MTZIA0"
	Obituary "$OB_METOOL1"
	weapon.ammotype "Base28Ammo"
	weapon.ammotype2 "BaseAltfireAmmo"
	weapon.ammouse 2
	States
	{
		Ready:
		TNT1 A 0 A_TakeInventory("MediumShortUltimateAmmo",999)
		MTOH A 0 A_JumpIfInventory("BaseAltfireAmmo",56,"Ready.TF")
		MTOH A 1 A_WeaponReady(WRF_NOPRIMARY*CallACS("VC_AmmoCheck",0,2)|WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,37)) MTOH A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
		MTOH A 1 A_WeaponReady(WRF_NOPRIMARY*CallACS("VC_AmmoCheck",0,2)|WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,37)) MTOH A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
		MTOH A 0 A_GiveInventory("Base28Ammo",1)
		MTOH A 0 A_GiveInventory("BaseAltfireAmmo",2)
		goto Ready
		
		Ready.TF:
		MTOH A 1 A_WeaponReady(WRF_NOPRIMARY*CallACS("VC_AmmoCheck",0,2)|WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,37)) MTOH A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") MTOH A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
		MTOH A 1 A_WeaponReady(WRF_NOPRIMARY*CallACS("VC_AmmoCheck",0,2)|WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,37)) MTOH A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") MTOH A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
		MTOH A 0 A_GiveInventory("Base28Ammo",1)
		MTOH A 0 A_GiveInventory("BaseAltfireAmmo",2)
		goto Ready
		
		Deselect:
		TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
		MTOH A 1 A_Lower
		Loop
		
		Select:
		MTOH A 0 A_GiveInventory("MetStartCheck",1)
		MTOH A 0 A_GiveInventory("VC_Timer",1) //So the health check never repeats. -Fr3ak
		MTOH A 0 A_GunFlash
		MTOH A 0 ACS_ExecuteAlways(998,0,666)
		MTOH A 1 A_WeaponReady(14)
		goto Ready
		
		User1:
		MTOH A 1 Offset(0,36)
		MTOH A 1 Offset(0,40)
		MTOH A 1 Offset(0,44)
		
		User1.Loop:
		TOAD A 0 A_GiveInventory("ToadChargeDamageGive")
		MTOH A 1 A_GiveInventory("MetZCharge",1)
		MTOH AA 1 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1.Loop")
		
		User1.End:
		MTOH B 1 Offset(-5,0) A_GiveInventory("MetTFHandler")
		MTOH B 1 Offset(5,0)
		MTOH B 1 Offset(-4,0)
		MTOH B 1 Offset(4,0)
		MTOH B 1 Offset(-3,0)
		MTOH B 1 Offset(3,0)
		MTOH B 1 Offset(-2,0)
		MTOH B 1 Offset(2,0)
		MTOH B 1 Offset(-1,0)
		MTOH B 1 Offset(1,0)
		MTOH BBBA 1 A_WeaponReady(WRF_NOFIRE)
		goto Ready
		
		Fire:
		TNT1 A 0 A_JumpIfInventory("WeaponCharge",1,"Fire.Ult")
		MTOH A 0 A_PlaySoundEx("weapon/metongerbuster","Weapon")
		MTOH A 0 A_FireCustomMissile("MetZBuster",0,1,0,8)
		MTOH A 1 Offset(0,48)
		MTOH A 1 Offset(0,64)
		MTOH A 3 Offset(0,80)
		MTOH A 2 Offset(0,72)
		MTOH A 2 Offset(0,64)
		MTOH A 2 Offset(0,56)
		MTOH A 2 Offset(0,48)
		MTOH A 2 Offset(0,40)
		MTOH A 2 A_WeaponReady(WRF_NOFIRE)
		goto Ready
		
		Altfire:
		RATU A 0 A_JumpIfInventory("NoAltfire",1,"Ready")
		TNT1 A 0 A_JumpIfInventory("WeaponCharge",1,"Fire.Ult")
		TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",2)
		goto Altfire.Next
		
		Altfire.Next:
		MTOH B 0 A_GiveInventory("MetZAltfireAmmoTaker",1)
		MTOH B 0 A_PlaySoundEx("weapon/metsummon","Weapon")
		MTOH B 0 A_SpawnItemEx("MetZChaser",60,0,0)
		MTOH B 0 A_SpawnItemEx("MetTeleportFX",60,0,32)
		goto Altfire.Anim
		
		Altfire.Anim:
		MTOH B 2 Offset(-5,0)
		MTOH B 2 Offset(5,0)
		MTOH B 2 Offset(-4,0)
		MTOH B 2 Offset(4,0)
		MTOH B 2 Offset(-3,0)
		MTOH B 2 Offset(3,0)
		MTOH B 2 Offset(-2,0)
		MTOH B 2 Offset(2,0)
		MTOH B 2 Offset(-1,0)
		MTOH B 2 Offset(1,0)
		MTOH BBBA 2 A_WeaponReady(WRF_NOFIRE)
		goto Ready
		
		UltimateAttack:
		MTOH B 0 ACS_NamedExecuteAlways("VC_UltimateText",0,124)
		TNT1 A 0 A_PlaySoundEx("classes/ultimateactivation","Auto")
		TNT1 A 0 A_GiveInventory("WeaponCharge",1)
		TNT1 A 0 A_GiveInventory("WindUltCooldown",1)
		TNT1 A 0 A_TakeInventory("UltAttackFlag",1)
		MTOH B 2
		
		Ult.Waiting:
		TNT1 A 0 A_GiveInventory("WindUltCooldown",1)
		TNT1 A 0 A_TakeInventory("MediumLongUltimateAmmo",4)
		DKC3 A 0 A_FireCustomMissile("MetDaddyPreview",0,0,0,8)
		MTOH B 1 A_WeaponReady(WRF_NOSECONDARY|WRF_NOSWITCH)
		TNT1 A 0 A_JumpIfInventory("MediumLongUltimateAmmo",1,"Ult.Waiting")
		Goto Fire.Ult
		
		Fire.Ult:
		TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",2)
		TNT1 A 0 A_TakeInventory("WeaponCharge",1)
		TNT1 A 0 A_FireCustomMissile("MetDaddyStart",0,0,0,8)
		MTOH B 1 Offset(5,0)
		MTOH B 1 Offset(-4,0)
		MTOH B 1 Offset(4,0)
		MTOH B 1 Offset(-3,0)
		MTOH B 1 Offset(3,0)
		MTOH B 1 Offset(-2,0)
		MTOH B 1 Offset(2,0)
		MTOH B 1 Offset(-1,0)
		MTOH B 1 Offset(1,0)
		MTOH BBBA 1 A_WeaponReady(WRF_NOFIRE)
		TNT1 A 0 A_TakeInventory("UltAttackFlag",1)
		MTOH A 2 A_TakeInventory("MediumLongUltimateAmmo",999)
		Goto Ready+1

		Flash:
		TNT1 A 1 A_GiveInventory("MetSuitHealthCheck")
		loop
	}
}

actor MetSuitSpinning : MetSuitChaser
{
	Weapon.SlotNumber 2
	Tag "Metonger Z - Spinning Metool"
	inventory.icon "MTZIB0"
	States
	{
		Altfire:
		RATU A 0 A_JumpIfInventory("NoAltfire",1,"Ready")
		TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",2)
		goto Altfire.Next
		
		Altfire.Next:
		MTOH B 0 A_GiveInventory("MetZAltfireAmmoTaker",1)
		MTOH B 0 A_PlaySoundEx("weapon/metsummon","Weapon")
		MTOH B 0 A_FireCustomMissile("MetZSpinning",0,0,0,8)
		MTOH B 0 A_SpawnItemEx("MetTeleportFX",60,0,58)
		goto Altfire.Anim
	}
}

actor MetSuitMommy : MetSuitChaser
{
	Weapon.SlotNumber 3
	Tag "Metonger Z - Metool Mommy"
	inventory.icon "MTZIC0"
	States
	{
		Altfire:
		RATU A 0 A_JumpIfInventory("NoAltfire",1,"Ready")
		TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",2)
		goto Altfire.Next
		
		Altfire.Next:
		MTOH B 0 A_GiveInventory("MetZAltfireAmmoTaker",1)
		MTOH B 0 A_PlaySoundEx("weapon/metsummon","Weapon")
		MTOH B 0 A_SpawnItemEx("MetZMommy",60,0,0)
		MTOH B 0 A_SpawnItemEx("MetTeleportFX",60,0,32)
		goto Altfire.Anim
	}
}

actor MetSuitSpace : MetSuitChaser
{
	Weapon.SlotNumber 4
	Tag "Metonger Z - Space Metool"
	inventory.icon "MTZID0"
	States
	{
		Altfire:
		RATU A 0 A_JumpIfInventory("NoAltfire",1,"Ready")
		TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",2)
		goto Altfire.Next
		
		Altfire.Next:
		MTOH B 0 A_GiveInventory("MetZAltfireAmmoTaker",1)
		MTOH B 0 A_PlaySoundEx("weapon/metsummon","Weapon")
		MTOH B 0 A_GiveInventory("MetSpaceHandler")
		MTOH B 0 A_SpawnItemEx("MetTeleportFX",0,-80,132)
		MTOH B 0 A_SpawnItemEx("MetTeleportFX",0,80,132)
		goto Altfire.Anim
	}
}
	
actor MetoolBusterBoss : VCBaseWeapon
{
	Obituary "$OB_METOOL1"
	weapon.ammotype "Base28Ammo"
	weapon.ammotype2 "BaseAltfireAmmo"
	States
	{
		Ready:
		TNT1 A 0 A_TakeInventory("MediumLongUltimateAmmo",999)
		TNT1 A 0 A_JumpIfInventory("BaseCustomFlag2",1,"Ready.TF")
		TNT1 A 0 A_JumpIfInventory("BaseAltfireAmmo",56,"Ready.TF")
		MTOH C 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,14)) TNT1 A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
		MTOH C 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,14)) TNT1 A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
		MTOH C 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,14)) TNT1 A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
		TNT1 A 0 A_GiveInventory("Base28Ammo",1)
		TNT1 A 0 A_JumpIfInventory("BaseCustomFlag2",1,"Ready")
		TNT1 A 0 A_GiveInventory("BaseAltfireAmmo",2)
		goto Ready
		
		Ready.TF:
		MTOH C 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,14)) TNT1 A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
		MTOH C 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,14)) TNT1 A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
		MTOH C 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,14)) TNT1 A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
		TNT1 A 0 A_GiveInventory("Base28Ammo",1)
		TNT1 A 0 A_JumpIfInventory("BaseCustomFlag2",1,"Ready")
		TNT1 A 0 A_GiveInventory("BaseAltfireAmmo",2)
		goto Ready
		
		Deselect:
		TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
		TNT1 A 1 A_Lower
		Loop
		
		Select:
		MTOH A 0 A_GunFlash("NoFlash")
		TNT1 A 0 ACS_ExecuteAlways(991,0,667)
		MTOH C 1 A_WeaponReady(14)
		goto Ready
		
		User1:
		MTOH D 0 A_JumpIfInventory("BaseCustomFlag2",1,"U1.Cancel")
		MTOH D 1
		TNT1 A 0 A_SpawnItemEx("MetPropeller",0,0,0,0,0,0,0,1)
		TNT1 A 0 A_GunFlash
		MTOH DDDC 1 A_GiveInventory("BaseCustomFlag2",1)
		goto Ready
		
		U1.Cancel:
		MTOH D 1
		TNT1 A 0 A_GunFlash("NoFlash")
		MTOH DDDC 1 A_TakeInventory("BaseCustomFlag2",1)
		goto Ready
		
		Fire:
		MTOH D 1
		TNT1 A 0 A_PlaySoundEx("weapon/enemyweapon","Weapon")
		TNT1 A 0 A_FireCustomMissile("MetClassShot",-6,0,0,-10)
		TNT1 A 0 A_FireCustomMissile("MetClassShot",0,0,0,-10)
		TNT1 A 0 A_FireCustomMissile("MetClassShot",6,0,0,-10)
		MTOH EEEEEED 1
		MTOH C 11
		goto Ready
		
		Altfire:
		TNT1 A 0 A_WeaponReady(WRF_NOBOB|WRF_NOFIRE)
		TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",4)
		TNT1 A 0 A_PlaySoundEx("weapon/methide","Weapon")
		MTOH DE 1
		TNT1 A 0 A_GiveInventory("MetHideSpeed",1)
		TNT1 A 0 A_GiveInventory("InvProtection",1)
		TNT1 A 0 A_ChangeFlag("INVULNERABLE",1)
		
		AltHold:
		TNT1 A 0 A_TakeInventory("Base28Ammo",1)
		TNT1 A 0 A_JumpIfInventory("Base28Ammo",1,1)
		goto AltFinish
		MTOH F 2 A_GiveInventory("MetHideAnim")
		TNT1 A 0 A_Refire
		
		AltFinish:
		TNT1 A 0 A_TakeInventory("Base28Ammo",14)
		TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",5)
		MTOH ED 1 A_ClearRefire
		TNT1 A 0 A_TakeInventory("MetHideSpeed",1)
		TNT1 A 0 A_TakeInventory("InvProtection",1)
		TNT1 A 0 A_ChangeFlag("INVULNERABLE",0)
		goto Ready
		
		UltimateAttack:
		TNT1 A 0 ACS_NamedExecuteAlways("VC_UltimateText",0,125)
		TNT1 A 0 A_PlaySoundEx("classes/ultimateactivation","Auto")
		MTOH A 0 A_GiveInventory("MetSuitReturn")
		MTOH A 35
		goto Ready
		
		Flash:
		TNT1 A 0 A_TakeInventory("BaseAltfireAmmo",2)
		TNT1 A 0 A_PlaySoundEx("weapon/methelicopter","Body")
		TNT1 A 0 A_JumpIfInventory("IsDead",1,"NoFlash")
		TNT1 A 1 A_GiveInventory("MetHeliCheck")
		TNT1 A 1 A_GiveInventory("MetHeliCheck")
		TNT1 A 1 A_GiveInventory("MetHeliCheck")
		TNT1 A 1 A_GiveInventory("MetHeliCheck")
		TNT1 A 0 A_JumpIfInventory("BaseAltfireAmmo",1,"Flash")
		
		NoFlash:
		TNT1 A 0 A_TakeInventory("BaseAltfireAmmo",56)
		TNT1 A 0 A_TakeInventory("BaseCustomFlag2",999)
		stop
	}
}

actor MetHideAnim : Powerup
{
Powerup.Duration 3
}

actor MetZCharge : Ammo
{
	inventory.amount 1
	inventory.maxamount 35
	+INVENTORY.IGNORESKILL
}

actor MetZAltfireAmmoTaker : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_TakeInventory("BaseAltfireAmmo",37)
stop
}
}

Actor MetZBuster
{
PROJECTILE
Scale 2.5
Speed 30
-NOGRAVITY
Gravity 4.0
Damage (16)
DamageType "MetongerZ"
Obituary "$OB_METOOL1"
Radius 20
Height 20
+DOOMBOUNCE
-BOUNCEONFLOORS
+NOEXPLODEFLOOR
BounceCount 2
BounceFactor 0.9
WallBounceFactor 0.9
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
TNT1 A 0 A_SetArg(0,20)
Spawn_L:
MZBU AAABBB 1 A_CheckFloor("Bounce.Floor")
Goto Spawn_L
Bounce.Floor:
MZBU A 0 A_ScaleVelocity(0.9)
MZBU A 0 A_CountDownArg(0,"Death")
MZBU B 3 ThrustThingZ(0,80,0,0)
Goto Spawn+3
Death:
TNT1 A 0
stop
}
}

actor MetTeleportFX : BasicClientSide
{
translation "108:108=216:216"
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileFXCode")
TRR2 QRSTUVWX 2
stop
}
}

actor MetZChaser
{
Obituary "$OB_METOOL2"
-SOLID
+MISSILE
+NOBLOOD
Bouncetype Hexen
-ALLOWBOUNCEONACTORS
+CANBOUNCEWATER
+FORCEXYBILLBOARD
+NOEXPLODEFLOOR
-BOUNCEONFLOORS
+NOGRAVITY
+SEEKERMISSILE
+SCREENSEEKER
bouncecount 10
WALLBOUNCEFACTOR 0.99
BOUNCEFACTOR 0.99
maxstepheight 32
maxdropoffheight 32
Height 16
damagetype "MetongerZ"
scale 2.5
damage (15)
reactiontime 20
radius 16
speed 0
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
METT G 12
METT G 0 A_ChangeFlag("NOGRAVITY",0)
goto Jumping

loopit:
METT B 0 A_Countdown
METT B 0 A_ChangeVelocity(20,0,momz,CVF_RELATIVE|CVF_REPLACE)
METT A 0 A_SeekerMissile (4, 8, SMF_LOOK|SMF_CURSPEED , 256, 10)
METT A 1 A_JumpIf(z-floorz>0, "Jumping")
METT A 0 A_SeekerMissile (4, 8, SMF_LOOK|SMF_CURSPEED , 256, 10)
METT A 1 A_JumpIf(z-floorz>0, "Jumping")
METT A 0 A_SeekerMissile (4, 8, SMF_LOOK|SMF_CURSPEED , 256, 10)
METT A 1 A_JumpIf(z-floorz>0, "Jumping")

METT B 0 A_SeekerMissile (4, 8, SMF_LOOK|SMF_CURSPEED , 256, 10)
METT B 1 A_JumpIf(z-floorz>0, "Jumping")
METT B 0 A_SeekerMissile (4, 8, SMF_LOOK|SMF_CURSPEED , 256, 10)
METT B 1 A_JumpIf(z-floorz>0, "Jumping")
METT B 0 A_SeekerMissile (4, 8, SMF_LOOK|SMF_CURSPEED , 256, 10)
METT B 1 A_JumpIf(z-floorz>0, "Jumping")

METT C 0 A_SeekerMissile (4, 8, SMF_LOOK|SMF_CURSPEED , 256, 10)
METT C 1 A_JumpIf(z-floorz>0, "Jumping")
METT C 0 A_SeekerMissile (4, 8, SMF_LOOK|SMF_CURSPEED , 256, 10)
METT C 1 A_JumpIf(z-floorz>0, "Jumping")
METT C 0 A_SeekerMissile (4, 8, SMF_LOOK|SMF_CURSPEED , 256, 10)
METT C 1 A_JumpIf(z-floorz>0, "Jumping")

METT B 0 A_SeekerMissile (4, 8, SMF_LOOK|SMF_CURSPEED , 256, 10)
METT B 1 A_JumpIf(z-floorz>0, "Jumping")
METT B 0 A_SeekerMissile (4, 8, SMF_LOOK|SMF_CURSPEED , 256, 10)
METT B 1 A_JumpIf(z-floorz>0, "Jumping")
METT B 0 A_SeekerMissile (4, 8, SMF_LOOK|SMF_CURSPEED , 256, 10)
METT B 1 A_JumpIf(z-floorz>0, "Jumping")
loop
Jumping:
METT G 1 A_JumpIf(z-floorz<=0, "loopit")
loop
Death:
MMFX F 0 A_ChangeFlag("NOINTERACTION",1)
MMFX FGHI 2 A_Stop
stop
}
}

actor MetZSpinning
{
PROJECTILE
damage(20)
Obituary "$OB_METOOL3"
radius 16
height 16
speed 50
scale 2.5
+DOOMBOUNCE
+BOUNCEONACTORS
damagetype "MetongerZSpin"
bouncecount 10
WALLBOUNCEFACTOR 0.99
BOUNCEFACTOR 0.99
reactiontime 48
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
METT GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG 1 A_ScaleVelocity(0.9)
loopit:
METT G 0 A_Stop
METT G 0 A_PlaySoundEx("weapon/metshot","Body")
METT G 0 A_SpawnItemEx("MetSpinShot",0,0,16,20)
METT G 1 A_SetAngle(angle+22.5)
METT G 0 A_Countdown
loop
Death:
MMFX F 0 A_ChangeFlag("NOINTERACTION",1)
MMFX FGHI 2 A_Stop
stop
}
}

actor MetongerZSpinProtect : PowerProtection
{
Powerup.Duration 3
DamageFactor "MetongerZSpin", 0.0
}

actor MetSpinShot
{
PROJECTILE
Obituary "$OB_METOOL3"
Damage (7)
Height 8
Radius 8
damagetype "MetongerZ"
Scale 2.5
speed 0
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
6ULT X 1
Goto Spawn+2
}
}

actor MetZMommy
{
+THRUACTORS
PROJECTILE
radius 1
height 1
speed 0
scale 2.5
bouncecount 10
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
ME7M A 3
Death:
MMFX F 0 A_PlaySoundEx("weapon/napalm","Body")
MMFX F 0 A_ChangeFlag("NOINTERACTION",1)
MMFX F 0 A_SpawnItemEx("MetZChild",8,0,8,20,0,15,0,1)
MMFX F 0 A_SpawnItemEx("MetZChild",8,0,8,20,0,15,25,1)
MMFX F 0 A_SpawnItemEx("MetZChild",8,0,8,20,0,15,-25,1)
MMFX FGHI 2 A_Stop
stop
}
}

Actor MetZChild
{
PROJECTILE
Scale 2.5
Speed 0
-NOGRAVITY
Gravity 3.0
Damage (12)
DamageType "MetongerZ"
Obituary "$OB_METOOL4"
Radius 8
Height 8
+DOOMBOUNCE
-BOUNCEONFLOORS
+NOEXPLODEFLOOR
BounceCount 3
BounceFactor 0.9
WallBounceFactor 0.9
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
TNT1 A 0 A_SetArg(0,15)
Spawn_L:
ME7M BBCCDDCC 1 A_CheckFloor("Bounce.Floor")
Goto Spawn_L
Bounce.Floor:
ME7M B 0 A_ScaleVelocity(0.9)
ME7M B 0 A_CountDownArg(0,"Death")
ME7M C 2 ThrustThingZ(0,70,0,0)
Goto Spawn+3
Death:
TNT1 A 0
stop
}
}

actor MetZSpace
{
Obituary "$OB_METOOL5"
PROJECTILE
Radius 16
Height 16
scale 2.5
damagetype "MetongerZ"
damage (10)
speed 20
bouncefactor 1.0
+HEXENBOUNCE
+SEEKERMISSILE
-DONTBLAST
+LOOKALLAROUND
bouncecount 99
ReactionTime 3
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
METQ "#" 0
"####" A 0
goto loopit

loopit:
"####" ABCDCB 2
"####" ABCDCB 2 A_SeekerMissile (90, 90, SMF_LOOK|SMF_PRECISE, 256, 10)
"####" AAA 0 A_Stop
"####" ABCDCBABCDCB 2
"####" A 0 A_Countdown
loop
Death:
MMFX F 0 A_ChangeFlag("NOINTERACTION",1)
MMFX FGHI 2 A_Stop
stop
}
}

actor MetZSwim : MetZSpace
{
Obituary "$OB_METOOL10"
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
MTSW "#" 0
"####" A 0
goto loopit
}
}

actor MetTFHandler : CustomInventory
{
States
{
Pickup:
TOAD A 0 A_GiveInventory("ToadChargeDamageTake")
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",2)
TNT1 A 0 A_JumpIfInventory("MetZCharge",35,"Pickup2")
TNT1 A 0 A_JumpIfInventory("MetCannonFlag",2,"Nope")
TNT1 A 0 A_JumpIfInventory("MetCannonEndDelay",1,"Nope")
TNT1 A 0 A_SpawnItemEx("MetZCannon",60,0,0)
TNT1 A 0 A_TakeInventory("BaseAltfireAmmo",56)
TNT1 A 0 A_PlaySoundEx("weapon/metsummon","Weapon")
TNT1 A 0 A_GiveInventory("MetCannonFlag",1)
TNT1 A 0 A_TakeInventory("MetZCharge",999)
stop
Pickup2:
TNT1 A 0 A_TakeInventory("BaseAltfireAmmo",56)
TNT1 A 0 A_PlaySoundEx("weapon/metsummon","Weapon")
TNT1 A 0 A_TakeInventory("MetZCharge",999)

TNT1 A 0 A_RadiusGive("DeleteMeMetool", 100, RGF_OBJECTS, 1)

TNT1 A 0 A_JumpIfInventory("RollingCutterFlag",1,"HealthMet")
TNT1 A 0 A_GiveInventory("RollingCutterFlag",1)
TNT1 A 0 A_GiveInventory("CamoAmmoCancel") //To get rid of the existing Ammo Mets
TNT1 A 0 A_SpawnItemEx("MetZCamoAmmo",60,0,0)
stop
HealthMet:
TNT1 A 0 A_TakeInventory("RollingCutterFlag",999)
TNT1 A 0 A_GiveInventory("CamoHealthCancel") //To get rid of the existing Health Met
TNT1 A 0 A_SpawnItemEx("MetZCamoHealth",60,0,0)
stop
Nope:
TNT1 A 0 ACS_Execute(979,0)
TNT1 A 0 A_TakeInventory("MetZCharge",999)
stop
}
}

actor MetCannonFlag : Inventory
{
inventory.amount 1
inventory.maxamount 2
}

actor MetZCannon
{
Projectile
+BOUNCEONWALLS
+NOEXPLODEFLOOR
+LOOKALLAROUND
+SEEKERMISSILE
+THRUACTORS
-NOTARGETSWITCH
+DONTREFLECT
wallbouncefactor 0.0
height 32
radius 1
speed 0
damage (0)
scale 2.5
reactiontime 400
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 AAAAAAAAAAAA 0 A_SpawnItemEx("MetTeleportFX",random(0,48),0,random(0,100),0,0,0,random(0,359))
METC A 12
METC C 0 A_ChangeFlag("NOGRAVITY",0)
METC C 0 A_ChangeFlag("NOCLIP",0)

AirWait:
METC A 1 A_JumpIf(z-floorz<=0, "Land")
loop

Land:
METC C 0 A_ChangeFlag("FLOORHUGGER",1)
METC C 0 A_ChangeFlag("NOGRAVITY",1)
METC C 0 ThrustThingZ(0,0,1,0)

loopit:
MMFX F 0 A_JumpIfInventory("CutterFlag",4,"Death")
METC A 0 A_Countdown
METC A 0 A_SeekerMissile(4, 10, SMF_LOOK|SMF_PRECISE, 256, 6)
METC A 1 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE)
loop

Missile:
METC BBBCCCCCCCCCCCEE 1 A_SeekerMissile(4, 10, SMF_PRECISE)
METC A 0 A_FaceTracer(0, 0)
MMFX F 0 A_GiveInventory("CutterFlag",1)
METC D 0 A_PlaySoundEx("weapon/metcannon","Body")
METC D 0 A_CustomMissile("MetZCannonShot",32,0,0,CMF_AIMDIRECTION, pitch)
METC D 0 A_RearrangePointers(AAPTR_DEFAULT,AAPTR_DEFAULT,AAPTR_NULL)
METC DDDEEEEAAAAAAAAAAAA 1 A_CountDown
goto loopit

Death:
MMFX F 0 A_ChangeFlag("NOINTERACTION",1)
MMFX FGHI 2 A_Stop
MMFX F 0 A_GiveToTarget("MetCannonTake",1)
MMFX F 0 A_GiveToTarget("MetCannonEndDelay",1)
stop
}
}

actor MetCannonTake : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_TakeInventory("MetCannonFlag",1)
stop
}
}

actor MetZCannonShot
{
PROJECTILE
DamageType "MetongerZSentry"
Obituary "$OB_METOOL6"
Speed 40
Radius 20
Height 20
Damage (12)
Scale 2.5
+SEEKERMISSILE
+SCREENSEEKER
-EXTREMEDEATH
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
METC F 1
goto Spawn+2
}
}

actor MetZCamoAmmo : MetZCannon
{
reactiontime 100
scale 2.0
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_SpawnItemEx("MetTeleportFX",0,0,16)
TNT1 A 0 Thing_ChangeTID(0,999)
EBAL CDCD 6
EBAL C 0 A_ChangeFlag("NOGRAVITY",0)

AirWait:
EBAL C 0 A_JumpIfInTargetInventory("CamoAmmoCancel",1,"Death")
EBAL CCCCCC 1 A_JumpIf(z-floorz<=0, "Land")
EBAL C 0 A_JumpIfInTargetInventory("CamoAmmoCancel",1,"Death")
EBAL DDDDDD 1 A_JumpIf(z-floorz<=0, "Land")
loop

Land:
EBAL C 0 A_ChangeFlag("FLOORHUGGER",1)
EBAL C 0 A_ChangeFlag("NOGRAVITY",1)
EBAL C 0 A_RearrangePointers(AAPTR_DEFAULT,AAPTR_DEFAULT,AAPTR_NULL)
EBAL C 0 ThrustThingZ(0,0,1,0)
EBAL C 0 A_JumpIfInTargetInventory("LightTeamFlag",1,"loopit.L")
EBAL C 0 A_JumpIfInTargetInventory("WilyTeamFlag",1,"loopit.W")
EBAL C 0 A_JumpIfInTargetInventory("CossackTeamFlag",1,"loopit.C")
EBAL C 0 A_JumpIfInTargetInventory("KingTeamFlag",1,"loopit.K")

loopit:
EBAL C 0 A_JumpIfInTargetInventory("CamoAmmoCancel",1,"Death")
EBAL C 0 A_Countdown
EBAL C 0 A_SeekerMissile(4, 10, SMF_LOOK|SMF_PRECISE, 256, 6)
EBAL CCCCCC 1 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE, 100)
EBAL D 0 A_JumpIfInTargetInventory("CamoAmmoCancel",1,"Death")
EBAL D 0 A_Countdown
EBAL D 0 A_SeekerMissile(4, 10, SMF_LOOK|SMF_PRECISE, 256, 6)
EBAL DDDDDD 1 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE, 100)
loop

loopit.L:
EBAL C 0 A_JumpIfInTargetInventory("CamoAmmoCancel",1,"Death")
EBAL C 0 A_SpawnItemEx("MetTrapIndicatorL")
EBAL C 0 A_Countdown
EBAL C 0 A_SeekerMissile(4, 10, SMF_LOOK|SMF_PRECISE, 256, 6)
EBAL CCCCCC 1 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE, 100)
EBAL D 0 A_JumpIfInTargetInventory("CamoAmmoCancel",1,"Death")
EBAL D 0 A_Countdown
EBAL D 0 A_SeekerMissile(4, 10, SMF_LOOK|SMF_PRECISE, 256, 6)
EBAL DDDDDD 1 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE, 100)
loop

loopit.W:
EBAL C 0 A_JumpIfInTargetInventory("CamoAmmoCancel",1,"Death")
EBAL C 0 A_SpawnItemEx("MetTrapIndicatorW")
EBAL C 0 A_Countdown
EBAL C 0 A_SeekerMissile(4, 10, SMF_LOOK|SMF_PRECISE, 256, 6)
EBAL CCCCCC 1 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE, 100)
EBAL D 0 A_JumpIfInTargetInventory("CamoAmmoCancel",1,"Death")
EBAL D 0 A_Countdown
EBAL D 0 A_SeekerMissile(4, 10, SMF_LOOK|SMF_PRECISE, 256, 6)
EBAL DDDDDD 1 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE, 100)
loop

loopit.C:
EBAL C 0 A_JumpIfInTargetInventory("CamoAmmoCancel",1,"Death")
EBAL C 0 A_SpawnItemEx("MetTrapIndicatorC")
EBAL C 0 A_Countdown
EBAL C 0 A_SeekerMissile(4, 10, SMF_LOOK|SMF_PRECISE, 256, 6)
EBAL CCCCCC 1 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE, 100)
EBAL D 0 A_JumpIfInTargetInventory("CamoAmmoCancel",1,"Death")
EBAL D 0 A_Countdown
EBAL D 0 A_SeekerMissile(4, 10, SMF_LOOK|SMF_PRECISE, 256, 6)
EBAL DDDDDD 1 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE, 100)
loop

loopit.K:
EBAL C 0 A_JumpIfInTargetInventory("CamoAmmoCancel",1,"Death")
EBAL C 0 A_SpawnItemEx("MetTrapIndicatorK")
EBAL C 0 A_Countdown
EBAL C 0 A_SeekerMissile(4, 10, SMF_LOOK|SMF_PRECISE, 256, 6)
EBAL CCCCCC 1 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE, 100)
EBAL D 0 A_JumpIfInTargetInventory("CamoAmmoCancel",1,"Death")
EBAL D 0 A_Countdown
EBAL D 0 A_SeekerMissile(4, 10, SMF_LOOK|SMF_PRECISE, 256, 6)
EBAL DDDDDD 1 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE, 100)
loop

Missile:
CMFT CCCCCC 1 A_SeekerMissile(90, 90, SMF_PRECISE, 256, 10)
CMFT C 0 A_FaceTracer(0, 0)

MissileLoop:
CMFT D 0 A_CustomMissile("MetZCamoShot",8,0,0,CMF_AIMDIRECTION, pitch)
CMFT D 0 A_PlaySoundEx("weapon/metshot","Body")
CMFT DDD 1 A_FaceTracer(0,0)
CMFT D 0 A_CustomMissile("MetZCamoShot",8,0,0,CMF_AIMDIRECTION, pitch)
CMFT D 0 A_PlaySoundEx("weapon/metshot","Body")
CMFT DDD 1 A_FaceTracer(0, 0)
CMFT C 0 A_CustomMissile("MetZCamoShot",8,0,0,CMF_AIMDIRECTION, pitch)
CMFT C 0 A_PlaySoundEx("weapon/metshot","Body")
CMFT CCC 1 A_FaceTracer(0, 0)
CMFT C 0 A_CustomMissile("MetZCamoShot",8,0,0,CMF_AIMDIRECTION, pitch)
CMFT C 0 A_PlaySoundEx("weapon/metshot","Body")
CMFT CCC 1 A_FaceTracer(0, 0)
CMFT C 0 A_GiveInventory("CutterFlag",1)
CMFT C 0 A_JumpIfInventory("CutterFlag",5,1)
loop
CMFT DDDDDD 1

Death:
MMFX F 0 A_ChangeFlag("NOINTERACTION",1)
MMFX FGHI 2 A_Stop
stop
}
}

actor MetZCamoHealth : MetZCamoAmmo
{
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_SpawnItemEx("MetTeleportFX",0,0,16)
HBAL CDCD 6
HBAL C 0 A_ChangeFlag("NOGRAVITY",0)

AirWait:
HBAL C 0 A_JumpIfInTargetInventory("CamoHealthCancel",1,"Death")
HBAL CCCCCC 1 A_JumpIf(z-floorz<=0, "Land")
HBAL C 0 A_JumpIfInTargetInventory("CamoHealthCancel",1,"Death")
HBAL DDDDDD 1 A_JumpIf(z-floorz<=0, "Land")
loop

Land:
HBAL C 0 A_ChangeFlag("FLOORHUGGER",1)
HBAL C 0 A_ChangeFlag("NOGRAVITY",1)
HBAL C 0 A_RearrangePointers(AAPTR_DEFAULT,AAPTR_DEFAULT,AAPTR_NULL)
HBAL C 0 ThrustThingZ(0,0,1,0)
HBAL C 0 A_JumpIfInTargetInventory("LightTeamFlag",1,"loopit.L")
HBAL C 0 A_JumpIfInTargetInventory("WilyTeamFlag",1,"loopit.W")
HBAL C 0 A_JumpIfInTargetInventory("CossackTeamFlag",1,"loopit.C")
HBAL C 0 A_JumpIfInTargetInventory("KingTeamFlag",1,"loopit.K")

loopit:
HBAL C 0 A_JumpIfInTargetInventory("CamoHealthCancel",1,"Death")
HBAL C 0 A_Countdown
HBAL C 0 A_SeekerMissile(4, 10, SMF_LOOK|SMF_PRECISE, 256, 6)
HBAL CCCCCC 1 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE, 100)
HBAL D 0 A_JumpIfInTargetInventory("CamoAmmoCancel",1,"Death")
HBAL D 0 A_Countdown
HBAL D 0 A_SeekerMissile(4, 10, SMF_LOOK|SMF_PRECISE, 256, 6)
HBAL DDDDDD 1 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE, 100)
loop

loopit.L:
HBAL C 0 A_JumpIfInTargetInventory("CamoHealthCancel",1,"Death")
HBAL C 0 A_SpawnItemEx("MetTrapIndicatorL")
HBAL C 0 A_Countdown
HBAL C 0 A_SeekerMissile(4, 10, SMF_LOOK|SMF_PRECISE, 256, 6)
HBAL CCCCCC 1 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE, 100)
HBAL D 0 A_JumpIfInTargetInventory("CamoAmmoCancel",1,"Death")
HBAL D 0 A_Countdown
HBAL D 0 A_SeekerMissile(4, 10, SMF_LOOK|SMF_PRECISE, 256, 6)
HBAL DDDDDD 1 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE, 100)
loop

loopit.W:
HBAL C 0 A_JumpIfInTargetInventory("CamoHealthCancel",1,"Death")
HBAL C 0 A_SpawnItemEx("MetTrapIndicatorW")
HBAL C 0 A_Countdown
HBAL C 0 A_SeekerMissile(4, 10, SMF_LOOK|SMF_PRECISE, 256, 6)
HBAL CCCCCC 1 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE, 100)
HBAL D 0 A_JumpIfInTargetInventory("CamoAmmoCancel",1,"Death")
HBAL D 0 A_Countdown
HBAL D 0 A_SeekerMissile(4, 10, SMF_LOOK|SMF_PRECISE, 256, 6)
HBAL DDDDDD 1 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE, 100)
loop

loopit.C:
HBAL C 0 A_JumpIfInTargetInventory("CamoHealthCancel",1,"Death")
HBAL C 0 A_SpawnItemEx("MetTrapIndicatorC")
HBAL C 0 A_Countdown
HBAL C 0 A_SeekerMissile(4, 10, SMF_LOOK|SMF_PRECISE, 256, 6)
HBAL CCCCCC 1 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE, 100)
HBAL D 0 A_JumpIfInTargetInventory("CamoAmmoCancel",1,"Death")
HBAL D 0 A_Countdown
HBAL D 0 A_SeekerMissile(4, 10, SMF_LOOK|SMF_PRECISE, 256, 6)
HBAL DDDDDD 1 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE, 100)
loop

loopit.K:
HBAL C 0 A_JumpIfInTargetInventory("CamoHealthCancel",1,"Death")
HBAL C 0 A_SpawnItemEx("MetTrapIndicatorK")
HBAL C 0 A_Countdown
HBAL C 0 A_SeekerMissile(4, 10, SMF_LOOK|SMF_PRECISE, 256, 6)
HBAL CCCCCC 1 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE, 100)
HBAL D 0 A_JumpIfInTargetInventory("CamoAmmoCancel",1,"Death")
HBAL D 0 A_Countdown
HBAL D 0 A_SeekerMissile(4, 10, SMF_LOOK|SMF_PRECISE, 256, 6)
HBAL DDDDDD 1 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE, 100)
loop

Missile:
CMFT AAAAAA 1 A_SeekerMissile(90, 90, SMF_PRECISE, 256, 10)
CMFT A 0 A_FaceTracer(0, 0)

MissileLoop:
CMFT B 0 A_CustomMissile("MetZCamoShot",8,0,0,CMF_AIMDIRECTION, pitch)
CMFT B 0 A_PlaySoundEx("weapon/metshot","Body")
CMFT BBB 1 A_FaceTracer(0, 0)
CMFT B 0 A_CustomMissile("MetZCamoShot",8,0,0,CMF_AIMDIRECTION, pitch)
CMFT B 0 A_PlaySoundEx("weapon/metshot","Body")
CMFT BBB 1 A_FaceTracer(0, 0)
CMFT A 0 A_CustomMissile("MetZCamoShot",8,0,0,CMF_AIMDIRECTION, pitch)
CMFT A 0 A_PlaySoundEx("weapon/metshot","Body")
CMFT AAA 1 A_FaceTracer(0, 0)
CMFT A 0 A_CustomMissile("MetZCamoShot",8,0,0,CMF_AIMDIRECTION, pitch)
CMFT A 0 A_PlaySoundEx("weapon/metshot","Body")
CMFT AAA 1 A_FaceTracer(0, 0)
CMFT A 0 A_GiveInventory("CutterFlag",1)
CMFT A 0 A_JumpIfInventory("CutterFlag",5,1)
loop
CMFT DDDDDD 1

Death:
MMFX F 0 A_ChangeFlag("NOINTERACTION",1)
MMFX FGHI 2 A_Stop
stop
}
}

actor MetZCamoShot : MetZCannonShot
{
Obituary "$OB_METOOL7"
Speed 45
Radius 8
Height 8
Damage (5)
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
6ULT X 1
goto Spawn+2
}
}

actor MetTrapIndicatorL : BasicClientSide
{
translation "198:198=74:74"
renderstyle translucent
alpha 0.5
VisibleToTeam 0
States
{
Spawn:
MZBU C 15
stop
}
}

actor MetTrapIndicatorW : MetTrapIndicatorL
{
translation "198:198=41:41"
VisibleToTeam 1
}

actor MetTrapIndicatorC : MetTrapIndicatorL
{
translation "198:198=128:128"
VisibleToTeam 2
}

actor MetTrapIndicatorK : MetTrapIndicatorL
{
translation "198:198=232:232"
VisibleToTeam 3
}

actor MetDaddyPreview : FastProjectile
{
	PROJECTILE
	+SKYEXPLODE
	+NOEXPLODEFLOOR
	+THRUACTORS
	+DONTBLAST
	+DONTSPLASH
	damage (0)
	speed 600
	radius 16
	height 16
	states
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
		TNT1 AA 1
		Death:
		TNT1 A 0 A_SpawnItemEx("MetDaddyFXHelper",0,0,0,0,0,0)
		TNT1 A 1
		stop
	}
}

actor MetDaddyFXHelper : BasicHelper
{
+CLIENTSIDEONLY
States
{
Spawn:
TNT1 A 0
TNT1 A 5 A_JumpIf(CallACS("GVH_IsTargetClient")==1,"Spawn2")
goto Death
Spawn2:
TNT1 A 0 A_SpawnItemEx("MetDaddyFX",0,0,0,0,0,-1000)
TNT1 A 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Death")
stop
Death:
TNT1 A 0
stop
}
}

actor MetDaddyFX
{
	+SKYEXPLODE
	+NOEXPLODEFLOOR
	+NOTARGETSWITCH
	+DONTBLAST
	PROJECTILE
	scale 4.5
	radius 5
	height 5
	Renderstyle Translucent
	Alpha 0.6
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileFXCode",1)
		MDAD A 2
		stop
	}
}

actor MetDaddyStart : FastProjectile
{
PROJECTILE
+SPECTRAL
Radius 4
Height 4
scale 2.5
+RIPPER
+SKYEXPLODE
+DONTREFLECT
speed 600
damage (0)
States
{
Spawn:
TNT1 AA 1
Death:
TNT1 A 0 A_CheckFloor("Floor")
TNT1 A 0 A_CheckCeiling("Ceiling")
TNT1 A 1 //A_PlaySoundEx("misc/catcherdrop","Body")
TNT1 A 0 A_SpawnItemEx("MetDaddyMark",0,0,0,0,0,2000,0)
stop
Floor:
TNT1 A 0 A_SpawnItemEx("MetDaddyMark",0,0,0,0,0,2000)
stop
Ceiling:
TNT1 A 0 A_SpawnItemEx("MetDaddyMark",0,0,0,0,0,2000)
stop
}
}

actor MetDaddyMark
{
PROJECTILE
+SPECTRAL
+RIPPER
-DONTBLAST
+SKYEXPLODE
+DONTREFLECT
radius 2
height 8
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 1
goto Death
Death:
TNT1 A 30
TNT1 A 0 A_SpawnItemEx("MetZDaddy",0,0,0,0,0,-30)
stop
}
}

actor MetZDaddy
{
Obituary "$OB_METOOL8"
PROJECTILE
Radius 1
Height 1
scale 4.5
-NOGRAVITY
damage(0)
damagetype "PunkSuzy"
+THRUACTORS
+FORCEXYBILLBOARD 
+SKYEXPLODE
+DONTREFLECT
speed 30
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
loopit:
MDAD E 1 A_GiveToTarget("WindUltCooldown")
loop
Death:
MDAD A 0 A_PlaySoundEx("weapon/WilyPressCrush","Weapon")
MDAD A 0 A_Quake(6,25,0,1200)
MDAD A 0 A_Explode(250,300,0,0,300)
MDAD A 0 A_SpawnItemEx("MetZDaddyRiseFX")
MDAD AAAA 0 A_SpawnItemEx("MetZChaserUltStart",random(200,400),0,0,0,0,200,random(0,359))
MDAD GFG 3 A_TakeFromTarget("MediumLongUltimateAmmo",300)
MDAD AAAA 0 A_SpawnItemEx("MetZChaserUltStart",random(200,400),0,0,0,0,200,random(0,359))
MDAD FGFEFEFE 3 A_TakeFromTarget("MediumLongUltimateAmmo",300)
MDAD DDDDCCBBAAAAAAAAAAAA 2 A_FadeOut(0.05)
stop
}
}

actor MetZDaddyRiseFX
{
+NOCLIP
+THRUACTORS
-SOLID
gravity 99.0
renderstyle none
states
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
Spawn2:
TNT1 A 1
TNT1 A 0 A_JumpIf(z!=floorz, "Spawn2")
MCAT IIIIIIIIIIIIIIIIIIIIIIIIIII 0 A_SpawnItemEx("CatcherJunkBigFXZ", random(32,300), 0, 0, random(5,20), 0, random(5,15), random(0,360), 1)
stop
}
}


actor CatcherJunkBigFXZ : CatcherJunkBigFX
{
states
{
Death:
TNT1 A 0 A_SpawnItemEx("CatcherJunkSmallFX", 0,0,0,random(2,5), 0,random(1,8), random(0,360),1) 
TNT1 A 0 A_SpawnItemEx("CatcherJunkSmallFX", 0,0,0,random(2,5), 0,random(1,8), random(0,360),1)
stop
}
}

actor MetHeliCheck : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIf(momz<0 && z-floorz !=0,"Pickup2")
stop

Pickup2:
TNT1 A 0 ThrustThingZ(0,1,1,0)
stop
}
}

actor MetClassShot
{
PROJECTILE
Obituary "$OB_METOOL9"
Damage (7)
Height 8
Radius 8
damagetype "MetongerZ"
Scale 2.5
speed 30
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
6ULT X 1
Goto Spawn+2
}
}

actor MetPropeller
{
Scale 2.5
Height 0
Radius 0
+NOINTERACTION
+CLIENTSIDEONLY
-SOLID
+NOGRAVITY
+MISSILE
+DONTBLAST
States
{
Spawn:
MZBU D 0 A_Warp(AAPTR_TARGET, 0, 0, 20, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
MZBU D 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "Death")
MZBU D 1 A_Warp(AAPTR_TARGET, 0, 0, 20, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
MZBU E 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "Death")
MZBU E 1 A_Warp(AAPTR_TARGET, 0, 0, 20, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
MZBU E 0 A_JumpIfInTargetInventory("MetSuitStart",1,"Death")
MZBU E 0 A_JumpIfInTargetInventory("BaseCustomFlag2",1,"Spawn")
MZBU D 0 A_Warp(AAPTR_TARGET, 0, 0, 20, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
MZBU D 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "Death")
MZBU D 1 A_Warp(AAPTR_TARGET, 0, 0, 20, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
MZBU E 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "Death")
MZBU E 1 A_Warp(AAPTR_TARGET, 0, 0, 20, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
MZBU E 0 A_JumpIfInTargetInventory("BaseCustomFlag2",1,"Spawn")
Death:
TNT1 A 0
stop
}
}

actor MetBlinkWatcher1
{
Height 0
Radius 0
+NOINTERACTION
-SOLID
+NOGRAVITY
+MISSILE
Renderstyle none
reactiontime 17
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_GiveToTarget("ShadowInvisible",1)
TNT1 A 1 A_Countdown
TNT1 A 0 A_GiveToTarget("ShadowVisible",1)
TNT1 A 1 A_Countdown
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "Death")
loop
Death:
TNT1 A 0 A_GiveToTarget("MetNoSuitInv")
TNT1 A 1 A_GiveToTarget("ShadowVisible",1)
TNT1 A 0 A_GiveToTarget("MetNoSuitInv")
TNT1 A 1 A_GiveToTarget("ShadowVisible",1)
TNT1 A 0 A_GiveToTarget("MetNoSuitInv")
TNT1 A 1 A_GiveToTarget("ShadowVisible",1)
stop
}
}

actor MetBlinkWatcher2 : MetBlinkWatcher1
{
reactiontime 35
States
{
Death:
TNT1 A 0 A_GiveToTarget("MetSuitInv")
TNT1 A 1 A_GiveToTarget("ShadowVisible",1)
TNT1 A 0 A_GiveToTarget("MetSuitInv")
TNT1 A 1 A_GiveToTarget("ShadowVisible",1)
TNT1 A 0 A_GiveToTarget("MetSuitInv")
TNT1 A 1 A_GiveToTarget("ShadowVisible",1)
stop
}
}

actor MetNoSuitInv : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_TakeInventory("InvProtection",999)
TNT1 A 0 A_ChangeFlag("INVULNERABLE",0)
TNT1 A 0 SetPlayerProperty(0,0,16)
stop
}
}

actor MetSuitInv : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_TakeInventory("InvProtection",999)
TNT1 A 0 A_ChangeFlag("INVULNERABLE",0)
TNT1 A 0 SetPlayerProperty(0,1,16)
stop
}
}

actor MetSpaceHandler : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("IsUnderWater",1,"Water")
TNT1 A 0 A_SpawnItemEx("MetZSpace",0,-80,100)
TNT1 A 0 A_SpawnItemEx("MetZSpace",0,80,100)
stop

Water:
TNT1 A 0 A_SpawnItemEx("MetZSwim",0,-80,100)
TNT1 A 0 A_SpawnItemEx("MetZSwim",0,80,100)
stop
}
}

actor MetZChaserUltStart
{
Radius 12
Height 12
scale 2.5
PROJECTILE
+DONTBLAST
+SKYEXPLODE
States
{
Spawn:
TNT1 A 2
Death:
TNT1 A 0 A_SpawnItemEx("MetZChaserUlt", 0, 0, -17, 0, 0, -1, 0, SXF_NOCHECKPOSITION|SXF_ABSOLUTEMOMENTUM, 0)
stop
}
}

actor MetZChaserUlt : MetZChaser
{
-NOGRAVITY
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
METT D 1 A_CheckFloor("Land")
goto Spawn+2

Land:
METT EFE 2 ThrustThingZ(0,0,0,1)
goto loopit
}
}

actor MetHealthCheck : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(975, 0)==2,"Pickup2")
TNT1 A 0 HealThing(116,116)
TNT1 A 0 ACS_NamedExecuteWithResult("VC_AdjustMaxHealth",116,0)
stop

Pickup2:
TNT1 A 0 HealThing(100,100)
TNT1 A 0 ACS_NamedExecuteWithResult("VC_AdjustMaxHealth",100,0)
stop
}
}

actor MetStartCheck : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("VC_Timer",1,"Nope")
TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(975, 0)==2,"Pickup2")
stop

Pickup2:
TNT1 A 0 HealThing(100,100)
TNT1 A 0 ACS_NamedExecuteWithResult("VC_AdjustMaxHealth",100,0)
stop

Nope:
TNT1 A 0
stop
}
}